"""
编码修复工具
解决 Windows 控制台中文乱码问题
"""
import sys
import os


def fix_console_encoding():
    """
    修复 Windows 控制台中文乱码问题
    
    在 Windows 系统上设置控制台代码页为 UTF-8
    """
    if sys.platform == 'win32':
        try:
            # 设置控制台代码页为 UTF-8 (65001)
            os.system('chcp 65001 > nul 2>&1')
            return True
        except Exception as e:
            # 静默失败，不影响程序运行
            return False
    return True


def ensure_utf8_output():
    """
    确保输出使用 UTF-8 编码
    
    这个函数应该在程序开始时调用
    """
    # 设置环境变量
    os.environ['PYTHONIOENCODING'] = 'utf-8'
    
    # 修复控制台编码
    fix_console_encoding()


def safe_print(*args, **kwargs):
    """
    安全的打印函数，处理编码错误
    
    Args:
        *args: 要打印的内容
        **kwargs: print 函数的关键字参数
    """
    try:
        print(*args, **kwargs)
    except UnicodeEncodeError:
        # 如果出现编码错误，尝试使用 ASCII 编码
        try:
            encoded_args = [str(arg).encode('ascii', 'replace').decode('ascii') for arg in args]
            print(*encoded_args, **kwargs)
        except Exception:
            # 最后的备选方案
            print("[Encoding Error: Cannot display message]")


if __name__ == "__main__":
    print("=" * 80)
    print("编码修复工具测试")
    print("=" * 80)
    print()
    
    print("修复前的编码信息：")
    print(f"  stdout encoding: {sys.stdout.encoding}")
    print(f"  stderr encoding: {sys.stderr.encoding}")
    print(f"  default encoding: {sys.getdefaultencoding()}")
    print()
    
    print("正在修复编码...")
    result = fix_console_encoding()
    print(f"修复结果: {'成功' if result else '失败'}")
    print()
    
    print("修复后的编码信息：")
    print(f"  stdout encoding: {sys.stdout.encoding}")
    print(f"  stderr encoding: {sys.stderr.encoding}")
    print()
    
    print("测试中文输出：")
    print("  ✅ 这是中文测试")
    print("  📊 股票分析系统")
    print("  💼 投资决策官")
    print()
    
    print("=" * 80)
    print("✅ 测试完成")
    print("=" * 80)
